package edu.uoc.tds.pac4.client.ss1;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

import edu.uoc.tds.pac4.beans.Centre;
import edu.uoc.tds.pac4.common.TDSLanguageUtils;


public class JPanelLlistatCentres  extends JPanel{
	private static final long serialVersionUID = 1L;
	private JScrollPane jScrollPaneCentres = null;
	protected JTable jTableCentres = null;
	protected DefaultTableModel tableModel;
	
	/**
	 * Constructor
	 * This method initializes JPanelLlistatCentres
	 * @return javax.swing.JPanel
	 */
	public JPanelLlistatCentres() {
		GridBagConstraints gbcJScrollPaneCentres = new GridBagConstraints();
		gbcJScrollPaneCentres.fill = GridBagConstraints.BOTH;
		gbcJScrollPaneCentres.weighty = 1.0;
		gbcJScrollPaneCentres.weightx = 1.0;
		this.setLayout(new GridBagLayout());
		this.setName("jPanelCentres");
		this.add(getJjScrollPaneCentres(), gbcJScrollPaneCentres);
	}
	
	/**
	 * This method initializes jScrollPaneCentres
	 * 
	 * @return javax.swing.JPanelEvents
	 */
	private JScrollPane getJjScrollPaneCentres() {
		if (jScrollPaneCentres== null) {
			jScrollPaneCentres = new JScrollPane();
			jScrollPaneCentres.setViewportView(getJTableCentres());
		}
		return jScrollPaneCentres;
	}
	
	/**
	 * Dibuixa els events de la taula
	 * @param currentCentres
	 */
	public void drawCentres(Vector<Centre> currentCentres)
	{
		// Clear table
		int numrows = tableModel.getRowCount();
		for (int i = numrows - 1; i >= 0; i--)
			tableModel.removeRow(i);
		// actualitza la taula
		Iterator<Centre> it = currentCentres.iterator();
		while (it.hasNext()) {
			addRow(it.next());
		}
	}
	
	/**
	 * This method initializes jTableCentres
	 * 
	 * @return javax.swing.JTable
	 */
	protected JTable getJTableCentres() {
		if (jTableCentres == null) {
			tableModel = new DefaultTableModel();

			jTableCentres = new JTable(tableModel) {
				private static final long serialVersionUID = 1L;

				public boolean isCellEditable(int rowIndex, int vColIndex) {
					return false;
				}
			};
			tableModel.addColumn(TDSLanguageUtils
					.getMessage("Client.PantallaLListarCentres.Codi"));
			tableModel.addColumn(TDSLanguageUtils
					.getMessage("Client.PantallaLListarCentres.Centre"));
			tableModel.addColumn(TDSLanguageUtils
					.getMessage("Client.PantallaLListarCentres.Universitat"));
			tableModel.addColumn(TDSLanguageUtils
					.getMessage("Client.PantallaLListarCentres.Pais"));
			tableModel.addColumn(TDSLanguageUtils
					.getMessage("Client.PantallaLListarCentres.Localitat"));
			jTableCentres.setAutoCreateRowSorter(true);
			jTableCentres.setToolTipText("Llistat de centres");
			jTableCentres.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		}
		return jTableCentres;
	}
	
	/**
	 * Afegeix un event a la taula
	 * @param event Centre
	 */
	private void addRow(Centre centre) {
		Vector<String> row = new Vector<String>();
		row.add(centre.getCodi());
		row.add(centre.getNom());
		if(centre.getUniversitat() == null)
			row.add("");
		else
			row.add(centre.getUniversitat().getNom());
		if(centre.getPais() == null)
			row.add("");
		else
			row.add(centre.getPais().getNom());
		if(centre.getLocalitat() == null)
			row.add("");
		else
			row.add(centre.getLocalitat().getNom());

		tableModel.addRow(row);
	}
	
	/**
	 * Remove row
	 * @param row row
	 */
	public void removeSelectedRow(int row)
	{
		//jTableEvents.remove(row);
		tableModel.removeRow(row);
	}

	/**
	 * Retorna l'index de la fila seleccionada
	 * @return index de la fila
	 */
	public int getSelectedRow() {
		return jTableCentres.getSelectedRow();
	}
}
